AWS 製のグラフ DB 可視化ツールの Graph Explorer を試してみた
ウィスキー、シガー、パイプをこよなく愛する大栗です。
先日 JAWS-UG 横浜支部でグラフデータベースの可視化ツールである Graph Explorer の紹介をしました。実際に使用する時に、若干トリッキーな部分があったので設定を含めてご紹介します。
Graph Explorer
Graph Explorer は AWS 製のグラフデータの可視化ツールで、re:Invent 2022 のNeptune Serverless に関する Deep dive セッションの中でアナウンスされていたものです。
公式ドキュメントによると、『グラフクエリを記述しなくても、グラフデータベース内のラベル付きプロパティグラフ (LPG) またはリソース記述フレームワーク (RDF) データを参照』できるのでグラフクエリ言語を学習製図ともインタラクティブにデータを探索できるツールということです。ライセンスは Apache-2.0 license になっています。
以下の図のように、クライアントからグラフ DB へ直接アクセスする必要があるため、ネットワーク経路に注意が必要です。
試してみる
READMEを元に試してみます。
操作環境は、以下を想定しています。Neptune Serverless の起動方法はこちらのエントリを参照ください。
- サーバー環境:Amazon Linux 2(on Amazon EC2)
- グラフデータベース:Neptune Serverless
またサンプルデータは以下のハンズオンのデータを使用します。
Amazon Neptune でゲームの友人レコメンドエンジンを構築する
事前準備
前提のパッケージ類とグラフデータを準備します。
まずは Git と Docker をインストールします。
$ sudo yum install git docker -y Loaded plugins: extras_suggestions, langpacks, priorities, update-motd amzn2-core ・ ・ ・
次に環境変数を設定します。Neptune のエンドポイントを設定します。
$ export NEPTUNE_ENDPOINT=<Neptune Endpoint>
Docker を起動します
$ sudo usermod -a -G docker ec2-user $ sudo systemctl start docker $ sudo systemctl enable docker Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
データ作成用のスクリプトのダウンロードと展開を行います。
$ curl -sL http://d118jxrmrxsq90.cloudfront.net/recommendations.tar | tar -xv
Node.js を入れるために nvm をインストールします。
$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
nvm の設定を読み込みます。
$ . ~/.nvm/nvm.sh
Node.js v16 をインストールします。(v18 は glibc のバージョンで問題が発生するため v16 を入れています)
$ nvm install 16
インストールを確認します。
$ node -e "console.log('Running Node.js ' + process.version)" Running Node.js v16.19.0
依存パッケージをインストールします。
$ npm install --prefix scripts/ && npm install --prefix application
ここからサンプルデータを投入します。
まず頂点(vertex)を挿入します。
$ node scripts/insertVertices.js Loaded vertices successfully!
次に辺(edge)を挿入します。
$ node scripts/insertEdges.js Loaded edges successfully!
データを確認します。
$ node scripts/testDatabase.js { value: 56, done: false }
クライアントから Neptune へ接続できる経路を設定します。ここでは SSH の Port Forwarding で踏み台を設定します。
クライアントから SSH で接続します。
ssh -i path/to/<keypair file name> ec2-user@<EC2 Endpoint> -N -L 8182:<Neptune Endpoint>:8182
hosts で Neptune のエンドポイントを設定します。以下を hosts ファイルに追記します。
127.0.0.1 localhost <Neptune Endpoint>
DNS のキャッシュをクリアしておきます。
# macOS $ sudo killall -HUP mDNSResponder # Windows > Clear-DnsClientCache
クライアントから接続確認を行います。ここでブラウザからアクセスします。ドキュメントでは自己署名証明書を使用する手順になっていましたが、ここでは省きます。
https://<Neptune Endpoint>:8182/status
初回のアクセスで以下のようなエラーメッセージ(Chrome の場合)が表示されると思います。ここで詳細設定
をクリックします。
<Neptune Endpoint>にアクセスする(安全ではありません)
をクリックします。
ステータスの内容が表示されます。
Graph Explorer の導入
ここから Graph Explorer をインストールしていきます。
サーバー側でリポジトリをクローンします。
$ git clone https://github.com/aws/graph-explorer/
Docker イメージをビルドします。
$ cd graph-explorer/ $ sudo docker build --build-arg host=${NEPTUNE_ENDPOINT} -t graph-explorer .
ビルドしたイメージを起動します。
$ sudo docker run -dit -p 5173:5173 -p 8182:8182 --name neptune-client graph-explorer
クライアントからサーバーにブラウザでポート5173でアクセスします。
https://<EC2 Endpoint>:5173/
初回のアクセスで以下のようなエラーメッセージ(Chrome の場合)が表示されると思います。ここで詳細設定
をクリックします。ドキュメントでは自己署名証明書を使用する手順になっていましたが、ここでは省きます。
<EC2 Endpoint>にアクセスする(安全ではありません)
をクリックします。
グラフデータベースへのコネクションを設定します。ここではPublic or Proxy Endpoint
にhttps://<Neptune Endpoint>:8182
を入力して、Add Connection
をクリックします。
右上のOpen Graph Explorer
をクリックします
上部にある検索欄をクリックしてみます。
すると、頂点の一覧が出てきます。その中の一つの右側にある+
をクリックします。
右メニューのExpand
を開き、右下のExpand
をクリックします。
すると隣接する頂点が表示されます。
この様に、グラフデータの探索を行えます。
さいごに
クライアントから直接グラフデータベースへアクセスする必要があるため、Port Forwarding で経路を設定したり、証明書のエラーに対応する必要があったりと嵌るポイントが色々ありました。最初クライアントから Neptune へ直接アクセスする必要がないと思いこんでいて数日悩みましたが、Chrome の Developer Tool でブラウザがPublic or Proxy Endpoint
に対してアクセスを行っていたことを発見して、アクセス方法が理解できました。
Graph Explorer はまだまだこれから発展していくと思いますので、まずは試してみるとよいのではないかと思います。